package Negocio;

import java.rmi.*;
import java.rmi.server.*;
import java.util.*;

import dao.*;
import Entity.*;
import interfaces.TDARestourante;
import dto.*;
import java.sql.Date;
public class Restourante extends UnicastRemoteObject implements TDARestourante {

	private static Restourante res;
	private Empleado empplSer;
	private EmpleadoDAO hEmpleado;
	private RolDAO hRol;
	private MesaDAO hMesa;
	private SucursalDAO hSucursal;
	private ReservaDAO hReserva;
	
	private Restourante() throws RemoteException {
		super();
		hEmpleado = EmpleadoDAO.getInstancia();
		hRol = RolDAO.getInstance(); 
		hMesa = MesaDAO.getInstance();
		hSucursal = SucursalDAO.getInstance();
	}

	public static  Restourante getInstance() {
		if (res == null)
		{
			try {
				res = new Restourante();
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		}
	return res;
	}
	
	
	public void CrearEmpleado (EmpleadoDTO empl) throws RemoteException
	{
		Rol rol = new Rol();
		empplSer = new Empleado();
		empplSer.setApellido(empl.getApellido());
		empplSer.setNombre(empl.getNombre());
		empplSer.setPorcentaje(empl.getPorcentaje());
		rol.setNombre(empl.getRolEmpleado().getNombre());
		rol.setNumero(empl.getRolEmpleado().getNumero());
		empplSer.setRolEmpleado(rol);
		
		hEmpleado.crearEmpleado(empl);
		if (empplSer == null)
			throw new RemoteException("No se pudo guardar el Empleado"); 
	}
	
	public EmpleadoDTO MostrarEmpleado () throws RemoteException
	{
		if (empplSer != null)
		{
			EmpleadoDTO emp;
			RolDTO rol = new RolDTO (empplSer.getRolEmpleado().getNumero(),empplSer.getRolEmpleado().getNombre());
			emp = new EmpleadoDTO (empplSer.getApellido(),empplSer.getNombre(),empplSer.getPorcentaje(),rol);
			return emp;
		}
		throw new RemoteException("No existe Empleado");
	}

	public RolDTO ObtenerRol(String nombre) throws RemoteException 
	{
			RolDTO aux = hRol.ObtenerRol(nombre);
			return aux;
	}
	
	public MesaDTO ObtenerMesa (int numeroMesa, int sucursal) throws RemoteException
	{
		MesaDTO aux = null;
			try {
				aux = hMesa.ObtenerMesa(numeroMesa, sucursal);
			} catch  (Exception e){
				 throw new RemoteException("No se puedo encontrar la mesa");
			}
			return aux;
	}
	
	public void CrearMesa (MesaDTO mesa, int sucursal) throws RemoteException
	{
		SucursalEntity sucursale = hSucursal.obtenerSucursal(sucursal);
		MesaSimple mesanew = new MesaSimple (mesa.getNumeroMesa(),mesa.getLugares(),mesa.isOriginal());
		hMesa.crearMesaSimple(mesanew, sucursale);
	}
	
	public void UnirMesas (List<MesaDTO> mesa, int sucursal) throws RemoteException
	{
		SucursalEntity sucursale = hSucursal.obtenerSucursal(sucursal);
		hMesa.unirMesas(mesa, sucursale);
	}
	
	public void generarReserva (int sucursal,Date fecha, int cantPersonas) throws RemoteException
	{
		int disponibilidad=0;
		int capacidad;
		SucursalEntity sucursale = hSucursal.obtenerSucursal(sucursal);
		capacidad=sucursale.getCapacidad();
		int cantreserva =hReserva.obtenerReserva(sucursal, fecha);
		disponibilidad=capacidad-cantreserva;
		if (disponibilidad >= 0)
		{
			hReserva.crearReserva(sucursale, fecha, cantPersonas);	
		}
	}
	
	public void HacerPedidoMesa (int numeroMesa, int sucursal, List<ItemPedidoDTO> productos) throws RemoteException
	{
		MesaDTO mesa = hMesa.ObtenerMesa(numeroMesa, sucursal);
		
	}
	
}
